package br.com.droid;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import br.com.droid.model.AvaliacaoUnidade;

public class BancoAvaliacaoUnidade {
        
        private static BancoAvaliacaoUnidade instance;
        private ArrayList<AvaliacaoUnidade> listaAvaliacoes;

        public BancoAvaliacaoUnidade() {
        	listaAvaliacoes = new ArrayList<AvaliacaoUnidade>();
        }

        public static BancoAvaliacaoUnidade getBancoInstance() {
                if (instance == null)
                        instance = new BancoAvaliacaoUnidade();
                return instance;
        }

        public String inserirAvaliacaoUnidade(AvaliacaoUnidade avaliacao) {

                String teste = "INSERT into AvaliacaoUnidade(id_usuario, id_unidade, num_estrelas) values ("
                                + avaliacao.getId_usuario()
                                + ", "
                                + avaliacao.getId_unidade()
                                + ", "
                                + avaliacao.getNum_estrelas()
                                + ");";
                if (ConexaoMySQL.getConexaoMySQL() != null) {
                        Statement stm;
                        try {
                                stm = ConexaoMySQL.getConexaoMySQL().createStatement();
                                stm.executeUpdate(teste);
                                ConexaoMySQL.FecharConexao();
                                return "Avaliacao inserido no banco com sucesso!";
                        } catch (SQLException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                }
                return "Erro ao inserir a avaliacao!";
        }

        public String atualizarAvaliacaoUnidade(AvaliacaoUnidade avaliacaoUnidade) {
                String teste;

                teste = "UPDATE AvaliacaoUnidade set lastmodified = '"
                                + avaliacaoUnidade.getLastmodified() + "' where id_usuario = "
                                + avaliacaoUnidade.getId_usuario() + " and id_unidade = "
                                + avaliacaoUnidade.getId_unidade() + ";";

                if (ConexaoMySQL.getConexaoMySQL() != null) {
                        Statement stm;
                        try {
                                stm = ConexaoMySQL.getConexaoMySQL().createStatement();
                                stm.executeUpdate(teste);
                                ConexaoMySQL.FecharConexao();
                                return "Comentario deletado no banco com sucesso!";
                        } catch (SQLException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                }

                return "Erro ao atualizar a Avaliacao!";
        }
        
        public ArrayList<AvaliacaoUnidade> listarAvaliacoesUnidade(long idCentro) {

    		String teste = "SELECT a.* from AvaliacaoUnidade a, unidade u " +
							"where (a.id_unidade = u.id) and (u.id_centro = " + idCentro +") ORDER BY lastmodified DESC limit 100";
        	
    		listaAvaliacoes.clear();

    		if (ConexaoMySQL.getConexaoMySQL() != null) {
    			Statement stm;
    			try {
    				stm = ConexaoMySQL.getConexaoMySQL().createStatement();
    				ResultSet rs = stm.executeQuery(teste);
    				while (rs.next()) {
    					AvaliacaoUnidade avaliacao = new AvaliacaoUnidade();
    					avaliacao.setId_usuario(rs.getLong("id_usuario"));
    					avaliacao.setId_unidade(rs.getLong("id_unidade"));
    					avaliacao.setNum_estrelas(rs.getInt("num_estrelas"));
    					avaliacao.setLastmodified(rs.getString("lastmodified"));
    					listaAvaliacoes.add(avaliacao);
    				}
    				ConexaoMySQL.FecharConexao();
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    		return listaAvaliacoes;
    	}
        
        public ArrayList<AvaliacaoUnidade> listarAvaliacoesNaoSincronizados(String data, long idCentro) {

        	String teste = "SELECT a.* from AvaliacaoUnidade a, unidade u " +
					"where (a.id_unidade = u.id) and (a.lastmodified > '" + data + "') and (u.id_centro = " + idCentro +") ORDER BY lastmodified ;";
        	
    		listaAvaliacoes.clear();

    		if (ConexaoMySQL.getConexaoMySQL() != null) {
    			Statement stm;
    			try {
    				stm = ConexaoMySQL.getConexaoMySQL().createStatement();
    				ResultSet rs = stm.executeQuery(teste);
    				while (rs.next()) {
    					AvaliacaoUnidade avaliacao = new AvaliacaoUnidade();
    					avaliacao.setId_usuario(rs.getLong("id_usuario"));
    					avaliacao.setId_unidade(rs.getLong("id_unidade"));
    					avaliacao.setNum_estrelas(rs.getInt("num_estrelas"));
    					avaliacao.setLastmodified(rs.getString("lastmodified"));
    					listaAvaliacoes.add(avaliacao);
    				}
    				ConexaoMySQL.FecharConexao();
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    		return listaAvaliacoes;
    	}
}